// cf-455d
// 题意：给定n(n<=100000)个数，每个数都是[1, n]范围内的，现在有两种操作，
//        1.将[l, r]区间中，最后一个数插入到l前面
//        2.查询[l, r]区间中等于k的数的个数
//
// 题解：这题似乎有很多做法。官方blog给出的是分块的做法。
//       维护一个分块数组，以及每块中等于k的元素个数。
//       分别对两个操作进行维护。假设块大小为size，个数为num。
//       第一个操作，只需O(size)+O(num)的复杂度完成插入删除+右移，
//       第二个操作，也是只需要同样的复杂度利用维护的count统计个数。
// 
// 统计：2572ms
//
// run: $exec < input
#include <iostream>
#include <algorithm>
#include <deque>

int const maxn = 110000;
int const block_size = 300;
std::deque<int> blocks[maxn / block_size + 4];
int count[maxn / block_size + 4][maxn];
int n, q, ans;

int block_index(int x)
{
	return (x - 1) / block_size;
}

void print()
{
	for (int i = 0; i <= block_index(n); i++) {
		for (auto j : blocks[i]) std::cout << j << ' ';
		std::cout << '\n';
	}
}

int main()
{
	std::cin >> n;
	for (int i = 1, x; i <= n; i++) {
		std::cin >> x;
		int id = block_index(i);
		blocks[id].push_back(x);
		count[id][x]++;
	}

	std::cin >> q;
	for (int i = 0, op, l, r, k; i < q; i++) {
		std::cin >> op >> l >> r;
		l = (l + ans - 1) % n + 1; r = (r + ans - 1) % n + 1;
		if (l > r) std::swap(l, r);
		int idl = block_index(l), idr = block_index(r);
		int tl = (l - 1) % block_size, tr = (r - 1) % block_size;
		if (op == 1) {
			// shift
			for (int j = idl; j < idr; j++) {
				int t = blocks[j].back();
				count[j][t]--;
				blocks[j].pop_back();
				blocks[j + 1].push_front(t);
				count[j + 1][t]++;
			}

			// delete r and insert in front of l
			int t = blocks[idr][tr + (idl != idr)];
			blocks[idr].erase(blocks[idr].begin() + tr + (idl != idr));
			count[idr][t]--;
			blocks[idl].insert(blocks[idl].begin() + tl, t);
			count[idl][t]++;
		} else {
			std::cin >> k; k = (k + ans - 1) % n + 1; ans = 0;
			for (int j = idl + 1; j < idr; j++) ans += count[j][k];
			if (idl != idr) {
				for (int j = tl; j < block_size; j++) ans += (blocks[idl][j] == k);
				for (int j = 0; j <= tr; j++) ans += (blocks[idr][j] == k);
			} else
				for (int j = tl; j <= tr; j++) ans += (blocks[idl][j] == k);
			std::cout << ans << '\n';
		}

		//std::cout << "q = " << i << '\n'; print();
	}
}

